package com.cty.service;

import com.cty.mapper.StudentMapper;
import com.cty.mapper.TeacherMapper;
import com.cty.pojo.Student;
import com.cty.pojo.Student1;
import com.cty.pojo.Teacher;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Auther: cty
 * @Date: 2020/3/1 20:18
 * @Description:
 * @version: 1.0
 */
public class TestResultMap {
    public static void main(String[] args) throws IOException {
        // 获取日志对象
        Logger log = Logger.getLogger(TestResultMap.class);
        // 获取配置文件流
        InputStream is = Resources.getResourceAsStream("mybatis.xml");
        // 创建SqlSession工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        // 生产SqlSession
        SqlSession session = factory.openSession();
        // 获取绑定接口实现类
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);


        // 执行方法
//        log.debug("一 使用resultMap实现单表映射");
//        List<Student1> stu1List = studentMapper.selStu1();
//        for(Student1 stu1: stu1List){
//            log.debug(stu1);
//        }
//        log.debug("********************************************************");

//        log.debug("二 多表查询：关联单个对象");
//        log.debug("1 resultMap实现关联单个对象（N+1方式）");
//        List<Student> stuList1 = studentMapper.selAll1();
//        for(Student stu: stuList1){
//            log.debug(stu);
//        }
//        log.debug("********************************************************");

        log.debug("2 resultMap实现关联单个对象（联合查询方式）");
        List<Student> stuList2 = studentMapper.selAll2();
        for(Student stu: stuList2){
            log.debug(stu);
        }
        log.debug("********************************************************");

//        log.debug("3 Auto Mapping结合别名实现关联单个对象");
//        List<Student> stuList3 = studentMapper.selAll3();
//        for(Student stu: stuList3){
//            log.debug(stu);
//        }
//        log.debug("********************************************************");

//        log.debug("三 多表查询：关联集合对象");
//        log.debug("1 resultMap实现关联集合对象（N+1方式）");
//        List<Teacher> teaList1 = teacherMapper.selAllTea1();
//        for(Teacher tea: teaList1){
//            log.debug(tea);
//        }
//        log.debug("********************************************************");

//        log.debug("2 resultMap实现关联集合对象（联合查询方式）");
//        List<Teacher> teaList2 = teacherMapper.selAllTea2();
//        for(Teacher tea: teaList2){
//            log.debug(tea);
//        }
//        log.debug("********************************************************");

        // 提交事务
        session.commit();
        // 关闭session
        session.close();
    }
}
